package wodegua.d28_特殊文件_日志技术;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

/**
 * XML(全称Extensible Markup Language，可扩展标记语言)
 * 本质是一种数据的格式，可以用来存储复杂的数据结构，和数据关系。
 *
 * XML的特点
 * XML中的“<标签名>”称为一个标签或一个元素，一般是成对出现的。
 * XML中的标签名可以自己定义(可扩展)，但必须要正确的嵌套
 * XML中只能有一个根标签。
 * XML中的标签可以有属性。
 * 如果一个文件中放置的是XML格式的数据，这个文件就是XML文件，后缀一般要写成.xml。
 *
 * XML的语法规则
 * XML文件的后缀名为:xml，文档声明必须是第一行
 * <?xml version="1.0" encoding="UTF-8"?>
 *     version:XML默认的版本号码、该属性是必须存在的
 *     encoding:本XML文件的编码
 * XML中可以定义注释信息:<!--注释内容-->
 * XML中书写”<”、“&”等，可能会出现冲突，导致报错，此时可以用如下特殊字符替代。
 * &lt;     <   小于
 * &gt;     >   大于
 * &amp;    &   和
 * &apos;   '   单引号
 * &quot;   "   引号
 * XML中可以写一个叫CDATA的数据区:<![CDATA[….内容... ]]>，里面的内容可以随便写
 *
 * XML的作用和应用场景
 * 本质是一种数据格式，可以存储复杂的数据结构，和数据关系。
 * 应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构，在网络中进行传输。
 *
 * 解析XML文件
 * 使用程序读取XML文件中的数据
 * 注意:程序员并不需要自己写原始的I0流代码来解析XML，难度较大!也相当繁琐!
 * 其实，有很多开源的，好用的，解析XML的框架，最知名的是:Dom4j(第三方研发的)
 *
 * 需求:使用Dom4j把一个XML文件的数据进行解析
 * ① 下载Dom4j框架，官网下载。
 * ② 在项目中创建一个文件夹:lib
 * 将dom4j-2.1.3.jar文件复制到 lib 文件夹
 * ④ 在jar文件上点右键，选择 Add as Library ->点击OK
 * 在类中导包使用
 *
 * DOM4J解析XML文件的思想:文档对象模型
 * SAXReader解析器->Document:整个文档->Element:元素(标签)->(Attribute:属性)、(子元素、文本)
 *
 * Dom4j解析XML-得到Document对象
 * SAXReader:Dom4j提供的解析器，可以认为是代表整个Dom4j框架
 * 构造器/方法
 * public SAXReader()       构建Dom4]的解析器对象
 * public Document read(String url)     把XML文件读成Document对象
 * public Document read(InputStream is)     通过字节输入流读取XML文件
 *
 * Document
 * 方法名
 * Element getRootElement()     获得根元素对象
 *
 * Element提供的方法
 * 方法名
 * public String getName()      得到元素名字
 * public List<Element>elements()   得到当前元素下所有子元索
 * public List<Element>elements(String name)    得到当前元素下指定名字的子元素返回集合
 * public Element element(String name)      得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
 * public string attributeValue(String name)    通过属性名直接得到属性值
 * public String elementText(子元系名)      得到指定名称的子元素的文本
 * public string getText()      得到文本
 *
 */
public class d3_Xml {
    public static void main(String[] args) throws Exception {
        SAXReader sr = new SAXReader();
        Document d = sr.read("javase/src/xml_out.xml");
        Element root = d.getRootElement();

        Element e = root.element("book");
        System.out.println(e.attributeValue("id"));
        System.out.println(e.elementText("name"));
        System.out.println("----------------------");
        List<Element> el = root.elements();
        for (Element element : el) {
            List<Element> ell = element.elements();
            for (Element element1 : ell) {
                System.out.println(element1.getName() + "--->" + element1.getText());
            }
        }
        System.out.println("----------------------");
    }

    private static void outFile(){
    }
}
